#ifndef __CLASSIFIER_H__
#define __CLASSIFIER_H__

#include <string>
#include <vector>

// Forward declarations
class DataSet;
class Sample;

class Classifier
{
public:
  virtual ~Classifier();

  virtual int test(const Sample& s) const = 0;
  virtual void train(const DataSet& ds) = 0;

  void experiment(const DataSet &ds,
    float &accuracy,
    const std::vector<std::string> &names = std::vector<std::string>(),
    const bool &verbose = false) const;

protected:
  // As this class does not provide an implementation, you should not be able to construct it.
  Classifier();

  // After training this variable must contain the number of classes
  unsigned int nrClasses_;
};

#endif;